package com.wyp168.socket.udp.demo01;



import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
//import java.net.SocketException;
/**
 * UDP应用案例1
 * - 编写一个接收端A 和一个 发送端B
 * - 接收端A 在9999端口等待接收数据（receiver）
 * - 发送端B 向接收端A 发送数据 "hello， 明天吃火锅"
 * - 接收端A 接收到 发送端B 发送的数据， 回复"好的，明天见"，再退出
 * - 发送端B 接收到 接收端A 回复的数据，再退出
 */

//接收端A
public class ReceiverA {
    public static void main(String[] args) throws IOException {
        //1. 创建一个 DatagramSocket 对象， 准备在 9999 端口接收数据
        DatagramSocket socket = new DatagramSocket(9999);
        //2. 构建一个 DatagramPacket 对象，准备接收数据
        // 注意： UDP数据包最大为64K
        byte[] buf = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buf, buf.length);
        //3. 调用 接收方法
        // 通过网络传输将DatagramPacket对象 填充到packet 实例中
        // 如果没有数据报发送到 本机的9999端口，程序则会在此等待接收数据
        System.out.println("接收端A 等待接收数据...");
        socket.receive(packet);
        //把packet 进行拆包， 取出数据， 并显示
        byte[] data = packet.getData();

        String s = new String(data, 0, packet.getLength());
        System.out.println(s);

        //封装 回复的信息（好的，明天见）
        byte[] bytes = "好的，明天见".getBytes();
        packet = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("192.168.0.103"), 9998);
        socket.send(packet);

        //关闭资源
        socket.close();


    }
}
